package com.www.coroutinefinshdemo

import android.app.Application
import androidx.work.*
import com.www.coroutinefinshdemo.main.RefreshMainDataWork
import java.util.concurrent.TimeUnit

/**
 * 通过[WorkManager]覆盖应用程序来设置后台工作
 * @author MilkCoder
 * @date 2021-09-23
 */
class KotlinCoroutinesApp : Application() {

    /**
     * 在向用户显示第一个屏幕之前调用onCreate。
     *使用它来设置任何后台任务，在后台线程中运行昂贵的设置操作，以避免延迟应用程序启动。
     */
    override fun onCreate() {
        super.onCreate()
    }

    /**
     * 每天设置WorkManager后台任务来“获取”新的网络数据。
     */
    private fun setupWorkManagerJob() {
        //用工厂初始化WorkManager
        val workManagerConfiguration = Configuration.Builder()
            .setWorkerFactory(RefreshMainDataWork.Factory())
            .build()
        WorkManager.initialize(this, workManagerConfiguration)

        //使用约束来要求工作只在设备充电时运行
        //网络是无计量的
        val constraints = Constraints.Builder()
            .setRequiresCharging(true)
            .setRequiredNetworkType(NetworkType.UNMETERED)
            .build()

        // 指定工作应该每天尝试运行
        val work = PeriodicWorkRequestBuilder<RefreshMainDataWork>(1, TimeUnit.DAYS)
            .setConstraints(constraints)
            .build()

        //将WorkManager工作队列，保持先前计划的任何作业相同工作。
        WorkManager.getInstance(this)
            .enqueueUniquePeriodicWork(
                RefreshMainDataWork::class.java.name,
                ExistingPeriodicWorkPolicy.KEEP, work
            )
    }
}